今天開始講一些應用方面的東西,也是未為來的文章先做準備,今天的主題就是Thread線程,之前的的程式通常多以主線程執行就可以完成,不過在將來將會有許多耗時的工作,如果都塞在主線程可能就會出些大問題,也有些耗時的工作會被指定需要另開線程才能執行,像是執行SQL之類的。
Q:當有耗時的工作,通常會另開線程執行,為什麼呢?
A:可以想像成在機場排隊登機,如果可以派一個人去幫你排隊完成託運(耗時工作),然後你自己繼續去執行託登機(主要工作),這樣的話是不是很美好的,開線程的概念就是如此。
//新增線程
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
runOnUiThread(()->{
Toast.makeText(mContext,"託運開始",Toast.LENGTH_SHORT).show();
});
try {
thread.sleep(4000);
runOnUiThread(()->{
Toast.makeText(mContext,"託運完成",Toast.LENGTH_SHORT).show();
});
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
runOnUiThread():通常是一些畫面上的功能需要在這線程之上執行,像這裡的Toast。
由於光看程式碼還是相當模糊,決定依照剛才的例子規劃出一個劇本
劇本設定:
託運需要四秒,而前小明往登機口需要八秒。上影片(clap clap):
可以看到在小明走到一半的時候就顯示託運完成,這就是線程的效果。
以上是比較常見的用法,當各位熟悉線程的觀念後,可以再依照這些方法進行延伸閱讀。